package lx;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;

public class demo9 {
    public static void main(String[] args) throws IOException {
        //1.把文件中所有的学生信息读取到内存中
        ArrayList<Student> list = new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader("..\\day51\\src\\lx\\names.txt"));
        String line;
        while ((line = br.readLine()) != null) {
            //钦逸抒-女-21-1 我们以-为分割 把名字 性别 和年龄 还有权重获取出来
            String[] arr = line.split("-");
            //0索引是名字 1索引是性别 2索引是年龄 3索引是权重
            //创建学生对象 把这些索引对应的元素传给学生对象里的对应属性
            Student stu = new Student(arr[0], arr[1], Integer.parseInt(arr[2]), Double.parseDouble(arr[3]));
            //把学生对象添加到集合中

            list.add(stu);
        }
        br.close();
        //2.计算出所有学生总权重
        double sum = 0;
        for (Student stu : list) {
            sum += stu.getWeight();//=stu.getWeight()这个是获取每一个学生的权重
        }
        //3.计算每一个人的实际占比
        //[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
        //就是拿着每一个学生的权重/总共的权重（sum）
        double[] arr = new double[list.size()];
        for (int i = 0; i < list.size(); i++) {
            //list.get(i)获取每一个学生对象
            arr[i] = list.get(i).getWeight() / sum;
        }

        //4.计算每一个人的权重占比范围
        // 每一个学生的权重范围：[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
        // 每一个学生的实际占比  [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
        //怎么得到每一个学生的权重范围呢
        //规律 从第一个索引开始 第一个索引是前一个索引的值+本身 ，以此类推
        for (int i = 1; i < arr.length; i++) {
            arr[i] = arr[i] + arr[i - 1];
        }
        //5.随机抽取
        //获取一个0.0~1.0之间的随机数
        double number = Math.random();
        //判断number在arr中的位置
        /*
       数组的元素： [0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999]
        随机数number： 0.7664869727254292
         */
        //二分查找法
        //方法回返回： -插入点 - 1
        //获取number这个数据在数组当中的插入点位置
        //结果=-插入点-1
        //插入点=-结果-1
        System.out.println(Arrays.toString(arr));
        System.out.println(number);
        int result=-Arrays.binarySearch(arr,number)-1;
        System.out.println(result);

        //得到这个result的索引对应的学生
        Student stu = list.get(result);
        System.out.println(stu);

        //6.修改当前学生的权重
        double w = stu.getWeight() / 2;
        stu.setWeight(w);
        //7.把集合中的数据再次写到文件中
        BufferedWriter bw=new BufferedWriter( new FileWriter("..\\day51\\src\\lx\\names.txt"));
        for (Student s : list) {
            bw.write(s.toString());

            bw.newLine();
        }

        bw.close();
    }
}
